/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.flowumi.controladores.admin;

import com.flowumi.controladores.SessionFlowumiUtilBean;
import com.flowumi.entity.Cursos;
import com.flowumi.entity.Usuarios;
import com.flowumi.facade.AdminFacade;
import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;

/**
 *
 * @author ideacentre
 */
@ManagedBean
@ViewScoped
public class AdminDetalleCursoBean implements Serializable {

    private static final org.apache.log4j.Logger LOGGER =
            org.apache.log4j.Logger.getLogger(AdminDetalleCursoBean.class);
    @EJB
    AdminFacade adminFacade;
    private Cursos curso;
    private Cursos cursoEdit;
    @ManagedProperty("#{sessionFlowumiUtil}")
    private SessionFlowumiUtilBean sessionBean;

    public void setSessionBean(SessionFlowumiUtilBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    /**
     * Creates a new instance of AdminDetalleCursoBean
     */
    public AdminDetalleCursoBean() {
    }

    @PostConstruct
    public void init() {
        if (sessionBean.getUsuario().getIdRol() == null || sessionBean.getUsuario().getIdRol().getIdRol() != 1) {
            try {
                sessionBean.Desconectar();
                FacesContext.getCurrentInstance().getExternalContext().redirect("InicioSession.xhtml");
            } catch (IOException ex) {
                LOGGER.error(ex);
            }
        }
        Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
        curso = adminFacade.getDetalleCurso((Long) flash.get("idCurso"));
        cursoEdit = curso;
        LOGGER.debug(curso.getCursosestudiantesList().size());
    }

    public Cursos getCurso() {
        return curso;
    }

    public void setCurso(Cursos curso) {
        this.curso = curso;
    }

    public Cursos getCursoEdit() {
        return cursoEdit;
    }

    public void setCursoEdit(Cursos cursoEdit) {
        this.cursoEdit = cursoEdit;
    }

    public List<Usuarios> getListaEstudiantesNoCurso() {
        return adminFacade.getListaEstudiantesNoCurso(curso.getIdCurso());
    }

    public Date getFechaActual() {
        return new Date();
    }

    public Date getFechaMesDespuesFechaInicial() {
        if (cursoEdit.getFechaInicio() == null) {
            return new Date();
        }
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(cursoEdit.getFechaInicio().getTime());
        c.add(Calendar.MONTH, 1);
        return c.getTime();
    }

    public void Actualizarcurso() {
        LOGGER.info("Actualizando...");
        curso = adminFacade.ActualizarCurso(cursoEdit);
        cursoEdit = curso;
    }

    public void AgregarEstudiante(String codigo) {
        LOGGER.info("Agregando estudiante con id = " + codigo);
        Usuarios estudiante = adminFacade.getUsuario(codigo);
        LOGGER.debug(estudiante.getNombreUsuario() + " - " + estudiante.getNombre());
        curso = adminFacade.AgregarEstudiante(curso, estudiante);
    }

    public void SacarEstudiante(String codigo) {
        LOGGER.info("Sacando estudiante con id = " + codigo);
        Usuarios estudiante = adminFacade.getUsuario(codigo);
        LOGGER.debug(estudiante.getNombreUsuario() + " - " + estudiante.getNombre());
        curso = adminFacade.SacarEstudiante(curso, estudiante);
        cursoEdit = curso;
    }

    public void handleDateSelect() {
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(cursoEdit.getFechaInicio().getTime());
        c.add(Calendar.MONTH, 1);
        if (cursoEdit.getFechaFinalizacion().before(c.getTime())) {
            cursoEdit.setFechaFinalizacion(c.getTime());
        }
    }
}
